/*
 * L9DateTime.h
 *
 *  Created on: 2011-10-18
 *      Author: baixp
 */

#ifndef L9DATETIME_H_
#define L9DATETIME_H_
#include <FBase.h>
#include <FSystem.h>
using namespace Osp::Base;
using namespace Osp::System;

#include "L9Str.h"
#include "L9Util.h"
namespace lib9bada {
class L9DateTime {
private:
	int _Year;
	int _Month;
	int _Day;
	int _Hour;
	int _Minute;
	int _Second;
	int _DayOfWeek;
	void calcTime(String time);
	void calcDate(String date);
	void calcWeek();
	/**
	 * 返回指定月的天数
	 * @param year int
	 * @param month int
	 * @return int
	 */
	static int getMonthDays(int year, int month);

	/**
	 * 计算两个日期之间的天数
	 * @param setStr String
	 * @param SysDate String
	 * @return int
	 */
	static int countDays(String dateSmall, String dateBig);

	void minusDays(int day);
public:
	/**
	 * 返回系统当前日期时间对象
	 */
	L9DateTime();
	/**
	 * 根据日期时间字符串来创建L9DateTime对象,比如：2010/12/08 14:17:56
	 * 日期格式为 年/月/日,时间格式为 时:分:秒,日期与时间由空格分隔,其中日期的分隔符可以为-
	 * 创建L9DateTime对象可以只有日期部分或者时间部分
	 * @param datetime String
	 */
	L9DateTime(String datetime);

	virtual ~L9DateTime();
	/**
	 * 表示年的常量
	 */
	static const int K_DateTime_Year = 0;
	/**
	 * 表示月的常量
	 */
	static const int K_DateTime_Month = 1;
	/**
	 * 表示日的常量
	 */
	static const int K_DateTime_Day = 2;
	/**
	 * 表示小时的常量
	 */
	static const int K_DateTime_Hour = 3;
	/**
	 * 表示分钟的常量
	 */
	static const int K_DateTime_Minute = 4;
	/**
	 * 表示秒的常量
	 */
	static const int K_DateTime_Second = 5;
	/**
	 * 表示周的常量
	 */
	static const int K_DateTime_DayOfWeek = 6;

	/**
	 * 返回日期的某个部分
	 * @param part int
	 * @return int
	 */
	int getPart(int part);

	/**
	 * 返回以-分隔的日期，比如：2010-2-12
	 * @return String
	 */
	String getDate();
	/**
	 * 返回以：分隔的时间,比如：14:27:58
	 * @return String
	 */
	String getTime();

	/**
	 * 判断是否为闰年
	 * @param year int
	 * @return bool
	 */
	static bool isLeapYear(int year);
	/**
	 * 在当前日期上增加天数，可以为负数
	 * @param day
	 */
	L9DateTime addDays(int day);

	/**
	 * 返回两个日期时间之间的差part,part可能为年、月、日等常量
	 * @param int part
	 * @param L9DateTime dt
	 * @return int
	 */
	int getDiff(int part, L9DateTime dt);
};
}
;

#endif /* L9DATETIME_H_ */
